package 二分查找.easy;

/**
 * 1. 问题描述
 *      判断一个正整数是否为完全平方数
 *
 * 2. 算法分析
 *      二分法   注意整型类型的数字范围，解题时需要使用long类型，以免造成精度的丢失
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class 有效的完全平方数 {
    public static void main(String[] args) {

    }

    public static boolean isPerfectSquare(int num) {
        if(num == 0) {return false;}
        if(num == 1) {return true;}
        long i = 0; long j = num / 2 + 1; // 注意整数的取值范围 当num  = 808201 超出int的类型范围，会有精度的丢失，所以会出现异常，代码逻辑是没有问题的
        while(i <= j) {
            long mid = i + (j - i) / 2;
            if(mid*mid == num) {
                return true;
            } else if(mid*mid < num) {
                i = mid + 1;
            } else {
                j = mid - 1;
            }
        }
        return false;
    }
}
